package com.xbongbong.paas.service.impl;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.xbongbong.crm.abstracts.AbstractCrmUpdateDataService;
import com.xbongbong.i18n.util.I18nMessageUtil;
import com.xbongbong.paas.constant.MessageConstant;
import com.xbongbong.paas.constant.PaasConstant;
import com.xbongbong.paas.domain.entity.PaasFormDataEntity;
import com.xbongbong.paas.domain.entity.PaasFormEntity;
import com.xbongbong.paas.domain.entity.PaasProcessDataEntity;
import com.xbongbong.paas.domain.entity.ext.PaasFormEntityExt;
import com.xbongbong.paas.enums.DelEnum;
import com.xbongbong.paas.enums.FlowStatusEnum;
import com.xbongbong.paas.field.FieldAttrEntity;
import com.xbongbong.paas.help.UserHelp;
import com.xbongbong.paas.model.PaasFormModel;
import com.xbongbong.paas.pojo.AssociatedBusinessAfterSavePojo;
import com.xbongbong.paas.pojo.dto.FormDataUpdateDTO;
import com.xbongbong.paas.pojo.dto.SaasFormSaveDTO;
import com.xbongbong.paas.pojo.vo.FormDataUpdateVO;
import com.xbongbong.paas.service.ProModelService;
import com.xbongbong.paas.toolbox.exception.XbbException;
import com.xbongbong.paas.toolbox.util.BeanUtil;
import com.xbongbong.paas.toolbox.util.DateTimeUtil;
import com.xbongbong.paas.toolbox.wrap.UserVO;
import com.xbongbong.paas.util.FormDataUtil;
import com.xbongbong.parent.interfaces.logger.OperationLogFactory;
import com.xbongbong.pro.domain.entity.ReRollBackEntity;
import com.xbongbong.pro.enums.errorcodes.SystemErrorCodeEnum;
import com.xbongbong.pro.formdata.pojo.AfterSavePojo;
import com.xbongbong.pro.formdata.pojo.vo.BeforeUpdateVO;
import com.xbongbong.pro.formdata.pojo.vo.UpdateVO;
import com.xbongbong.saas.constant.BasicConstant;
import com.xbongbong.saas.constant.StringConstant;
import com.xbongbong.saas.domain.entity.RefundUserEntity;
import com.xbongbong.saas.domain.entity.ext.RefundEntityExt;
import com.xbongbong.saas.enums.XbbRefTypeEnum;
import com.xbongbong.saas.enums.business.RefundEnum;
import com.xbongbong.saas.help.SaasSaveHelp;
import com.xbongbong.saas.model.RefundModel;
import com.xbongbong.saas.model.RefundUserModel;
import com.xbongbong.saas.service.RefundService;
import com.xbongbong.workflow.domain.entity.WorkflowBackupDataEntity;
import com.xbongbong.workflow.model.WorkflowBackupDataModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;

/**
 * @author 吴峰
 * @date 2021/02/23 16:03
 */
@Service("refundFormDataUpdateServiceImpl")
public class RefundFormDataUpdateServiceImpl extends AbstractCrmUpdateDataService {

    private static final Logger LOG = LoggerFactory.getLogger(RefundFormDataUpdateServiceImpl.class);

    @Resource
    private UserHelp userHelp;
    @Resource
    private ProModelService proModelService;
    @Resource
    private RefundModel refundModel;
    @Resource
    private RefundService refundService;
    @Resource
    private SaasSaveHelp saasSaveHelp;
    @Resource
    private PaasFormModel paasFormModel;
    @Resource
    private WorkflowBackupDataModel workflowBackupDataModel;
    @Resource
    private RefundUserModel refundUserModel;
    @Resource
    private OperationLogFactory operationLogFactory;


    @Override
    public List<Integer> businessType() {
        return Arrays.asList(XbbRefTypeEnum.REFUND.getCode());
    }


    @Override
    public void businessImportSetData(FieldAttrEntity fieldAttrEntity, JSONObject oldData, JSONObject newData) {
        // 由各个业务层实现
        //判断退货退款导入无需覆盖字段
        boolean isRefundFinalAttr = Objects.equals(fieldAttrEntity.getAttr(), RefundEnum.REFUND_AMOUNT.getAttr()) || Objects.equals(fieldAttrEntity.getAttr(), RefundEnum.PAYMENT_SHEETS.getAttr())
                || Objects.equals(fieldAttrEntity.getAttr(), RefundEnum.INVOICES.getAttr()) || Objects.equals(fieldAttrEntity.getAttr(), RefundEnum.PAYMENTS.getAttr());
        if(isRefundFinalAttr) {
            newData.put(fieldAttrEntity.getAttr(), oldData.get(fieldAttrEntity.getAttr()));
        }
    }


    @Override
    public UpdateVO update(FormDataUpdateDTO formDataUpdateDTO, BeforeUpdateVO beforeUpdateVO, PaasFormEntityExt paasFormEntity, PaasFormDataEntity paasFormDataEntity, PaasFormDataEntity oldPaasFormDataEntity) throws XbbException {
        try {
            String corpid = formDataUpdateDTO.getCorpid();
            UserVO userVO = userHelp.getUserName(corpid, formDataUpdateDTO.getUserId(), formDataUpdateDTO.getLoginUserName(), beforeUpdateVO.getPaasFormDataEntity().getFlowStatus(), beforeUpdateVO.getPaasFormDataEntity().getCreatorId());
            Integer noApprovalRequired = beforeUpdateVO.getNoApprovalRequired();
            Integer updateLine = 0;
            AssociatedBusinessAfterSavePojo refundAfterSavePojo = null;
            if ( Objects.equals(noApprovalRequired, 1) ) {
                RefundEntityExt refundEntityExt = new RefundEntityExt();
                BeanUtil.copyProperties(paasFormDataEntity, refundEntityExt);
                // 关联产品特殊处理
                JSONObject data = paasFormDataEntity.getData();
                JSONObject refundDataList = refundEntityExt.getData();
                JSONArray productArray = saasSaveHelp.formatSelectProduct4Save2(refundDataList, RefundEnum.PRODUCTS.getAttr());
                JSONArray invoiceArray = refundDataList.getJSONArray(RefundEnum.INVOICES.getAttr());
                JSONArray paymentSheetArray = refundDataList.getJSONArray(RefundEnum.PAYMENT_SHEETS.getAttr());
                JSONArray paymentArray = refundDataList.getJSONArray(RefundEnum.PAYMENTS.getAttr());
                saasSaveHelp.formatLinkBusiness4SaveBySerialNo(data, RefundEnum.INVOICES.getAttr(), RefundEnum.INVOICES_LINKED_TEXT.getAttr(), RefundEnum.INVOICES.getFieldType());
                saasSaveHelp.formatLinkBusiness4SaveBySerialNo(data, RefundEnum.PAYMENT_SHEETS.getAttr(), RefundEnum.PAYMENT_SHEETS_LINKED_TEXT.getAttr(), RefundEnum.PAYMENT_SHEETS.getFieldType());
                saasSaveHelp.formatLinkBusiness4SaveBySerialNo(refundDataList, RefundEnum.PAYMENTS.getAttr(), RefundEnum.PAYMENTS_LINKED_TEXT.getAttr(), RefundEnum.PAYMENTS.getFieldType());
                FormDataUtil.removeSystemData(refundDataList);
                Object richTextData = removeRichText(refundDataList);
                //
                if(refundDataList!=null){
                    refundDataList.put(RefundEnum.ALL_IN_BOUND.getAttr(),BasicConstant.ZERO);
                }
                refundEntityExt.setData(refundDataList);
                updateLine = refundModel.update(refundEntityExt);
                refundEntityExt.getData().put(RefundEnum.PRODUCTS.getAttr(),productArray);
                refundAfterSavePojo = new AssociatedBusinessAfterSavePojo(invoiceArray, paymentSheetArray, paymentArray, null, new ReRollBackEntity());

                // 设置属性用于返回
                setPartialAttributes(refundEntityExt.getSubFormData(), refundEntityExt.getData(),
                        refundEntityExt.getUpdateTime(), refundEntityExt.getAddTime(), refundEntityExt.getSerialNo(),
                        refundEntityExt.getDepartmentId(), refundEntityExt.getOwnerId(),
                        paasFormDataEntity, beforeUpdateVO);
                //文件柜数据保存
                saveFile(formDataUpdateDTO, paasFormDataEntity, userVO);
                //富文本数据更新
                updateFormRichText(formDataUpdateDTO, richTextData);
            }
            return new UpdateVO(noApprovalRequired, paasFormDataEntity, updateLine, formDataUpdateDTO.getDataId(), userVO, refundAfterSavePojo);
        } catch (XbbException e) {
            afterSaveRollBack(formDataUpdateDTO, null, beforeUpdateVO, new ReRollBackEntity());
            throw e;
        } catch (Exception e) {
            afterSaveRollBack(formDataUpdateDTO, null, beforeUpdateVO, new ReRollBackEntity());
            LOG.error("purchaseInvoiceFormDataUpdateServiceImpl.update 出错：", e);
            throw new XbbException(SystemErrorCodeEnum.API_ERROR_100001);
        }
    }


    @Override
    public FormDataUpdateVO afterSave(FormDataUpdateDTO formDataUpdateDTO, BeforeUpdateVO beforeUpdateVO, UpdateVO updateVO, PaasFormEntityExt paasFormEntity, PaasFormDataEntity paasFormDataEntity, PaasFormDataEntity oldPaasFormDataEntity) throws XbbException {
        String corpid = formDataUpdateDTO.getCorpid();
        Long dataId = formDataUpdateDTO.getDataId();
        Integer businessType = formDataUpdateDTO.getBusinessType();
        AssociatedBusinessAfterSavePojo refundAfterSavePojo = updateVO.getAssociatedBusinessAfterSavePojo();
        ReRollBackEntity reRollBackEntity = new ReRollBackEntity();
        if (Objects.nonNull(refundAfterSavePojo)) {
           reRollBackEntity = refundAfterSavePojo.getReRollBackEntity();
        }
        try {
            FormDataUpdateVO formDataUpdateVO = new FormDataUpdateVO();
            Integer noApprovalRequired = updateVO.getNoApprovalRequired();
            if (Objects.equals(1, noApprovalRequired)) {
                SaasFormSaveDTO saasFormSaveDTO = new SaasFormSaveDTO();
                BeanUtil.copyProperties(formDataUpdateDTO, saasFormSaveDTO);
                packageSaasFormUpdateSaveDTO(saasFormSaveDTO, paasFormDataEntity, oldPaasFormDataEntity);
                PaasFormEntity paymentSheetFormEntity = paasFormModel.getByBusinessType(XbbRefTypeEnum.PAYMENT_SHEET.getCode(), corpid);
                PaasFormEntity invoiceFormEntity = paasFormModel.getByBusinessType(XbbRefTypeEnum.INVOICE.getCode(), corpid);
                boolean paymentSheetIsProcess = Objects.equals(paymentSheetFormEntity.getIsProcessForm(), BasicConstant.ONE);
                boolean invoiceIsProcess = Objects.equals(invoiceFormEntity.getIsProcessForm(), BasicConstant.ONE);

                refundAfterSavePojo.setSheetIsProcess(paymentSheetIsProcess);
                refundAfterSavePojo.setInvoiceIsProcess(invoiceIsProcess);
                AfterSavePojo afterSavePojo = refundService.afterSave(saasFormSaveDTO, refundAfterSavePojo);
                // 日志
                afterSaveLog(formDataUpdateDTO, paasFormEntity, paasFormDataEntity, oldPaasFormDataEntity, updateVO, beforeUpdateVO);
                // api发起
                apiHook(formDataUpdateDTO, updateVO, beforeUpdateVO);
                // 2021/3/3 业务规则
                activeRule(formDataUpdateDTO, beforeUpdateVO, updateVO);
                formDataUpdateVO.setMsg(I18nMessageUtil.getMessage(MessageConstant.FORM_ADD_RETURN_MSG));
                formDataUpdateVO.setCode(PaasConstant.FORM_ADD_RETURN_CODE);
            } else if (Objects.equals(noApprovalRequired, 2)) {
                // 自动拒绝
                formDataUpdateVO.setMsg(I18nMessageUtil.getMessage(MessageConstant.FORM_ADD_PROCESS_RETURN_MSG));
                formDataUpdateVO.setCode(PaasConstant.FORM_ADD_PROCESS_RETURN_CODE);
            } else {
                formDataUpdateVO.setMsg(I18nMessageUtil.getMessage(MessageConstant.FORM_ADD_PROCESS_RETURN_MSG));
                formDataUpdateVO.setCode(PaasConstant.FORM_ADD_PROCESS_RETURN_CODE);
                PaasProcessDataEntity paasProcessDataEntity = new PaasProcessDataEntity();
                paasProcessDataEntity.setCorpid(formDataUpdateDTO.getCorpid());
                paasProcessDataEntity.setFormDataId(dataId);
                paasProcessDataEntity.setBusinessType(businessType);
                paasProcessDataEntity.setSaasMark(formDataUpdateDTO.getSaasMark());
                proModelService.updateFormDataStatus(paasProcessDataEntity, FlowStatusEnum.IN_APPROVAL.getType());
            }
            formDataUpdateVO.setFormDataId(dataId);
            return formDataUpdateVO;
        } catch (XbbException e) {
            afterSaveRollBack(formDataUpdateDTO, updateVO, beforeUpdateVO, reRollBackEntity);
            throw e;
        } catch (Exception e) {
            afterSaveRollBack(formDataUpdateDTO, updateVO, beforeUpdateVO, reRollBackEntity);
            LOG.error("purchaseInvoiceFormDataUpdateServiceImpl.afterSave 出错：", e);
            throw new XbbException(SystemErrorCodeEnum.API_ERROR_100001);
        }
    }

    @Override
    public void apiHook(FormDataUpdateDTO formDataUpdateDTO, UpdateVO updateVO, BeforeUpdateVO beforeUpdateVO) throws XbbException {
        // 第三方服务
        lowCodeExecuteService(formDataUpdateDTO, updateVO, beforeUpdateVO);
    }

    @Override
    public UpdateVO updateForWorkflow(FormDataUpdateDTO formDataUpdateDTO, BeforeUpdateVO beforeUpdateVO, PaasFormEntityExt paasFormEntity, PaasFormDataEntity paasFormDataEntity, PaasFormDataEntity oldPaasFormDataEntity) throws XbbException {
        try {
            String corpid = formDataUpdateDTO.getCorpid();
            UserVO userVO = userHelp.getUserName(corpid, formDataUpdateDTO.getUserId(), formDataUpdateDTO.getLoginUserName(), beforeUpdateVO.getPaasFormDataEntity().getFlowStatus(), beforeUpdateVO.getPaasFormDataEntity().getCreatorId());
            Integer noApprovalRequired = beforeUpdateVO.getNoApprovalRequired();
            Integer updateLine = 0;
            AssociatedBusinessAfterSavePojo refundAfterSavePojo = null;
            RefundEntityExt refundEntityExt = new RefundEntityExt();
            BeanUtil.copyProperties(paasFormDataEntity, refundEntityExt);
            // 关联产品特殊处理
            JSONObject data = paasFormDataEntity.getData();
            JSONObject refundDataList = refundEntityExt.getData();
            JSONArray productArray = saasSaveHelp.formatSelectProduct4Save2(refundDataList, RefundEnum.PRODUCTS.getAttr());
            JSONArray invoiceArray = refundDataList.getJSONArray(RefundEnum.INVOICES.getAttr());
            JSONArray paymentSheetArray = refundDataList.getJSONArray(RefundEnum.PAYMENT_SHEETS.getAttr());
            JSONArray paymentArray = refundDataList.getJSONArray(RefundEnum.PAYMENTS.getAttr());
            saasSaveHelp.formatLinkBusiness4SaveBySerialNo(data, RefundEnum.INVOICES.getAttr(), RefundEnum.INVOICES_LINKED_TEXT.getAttr(), RefundEnum.INVOICES.getFieldType());
            saasSaveHelp.formatLinkBusiness4SaveBySerialNo(data, RefundEnum.PAYMENT_SHEETS.getAttr(), RefundEnum.PAYMENT_SHEETS_LINKED_TEXT.getAttr(), RefundEnum.PAYMENT_SHEETS.getFieldType());
            saasSaveHelp.formatLinkBusiness4SaveBySerialNo(refundDataList, RefundEnum.PAYMENTS.getAttr(), RefundEnum.PAYMENTS_LINKED_TEXT.getAttr(), RefundEnum.PAYMENTS.getFieldType());
            FormDataUtil.removeSystemData(refundDataList);
            Object richTextData = removeRichText(refundDataList);
            refundEntityExt.setData(refundDataList);
            updateLine = refundModel.update(refundEntityExt);
            refundEntityExt.getData().put(RefundEnum.PRODUCTS.getAttr(),productArray);
            refundAfterSavePojo = new AssociatedBusinessAfterSavePojo(invoiceArray, paymentSheetArray, paymentArray, null, new ReRollBackEntity());

            // 设置属性用于返回
            setPartialAttributes(refundEntityExt.getSubFormData(), refundEntityExt.getData(), refundEntityExt.getUpdateTime(), refundEntityExt.getAddTime(), refundEntityExt.getSerialNo(), refundEntityExt.getDepartmentId(), refundEntityExt.getOwnerId(), paasFormDataEntity, beforeUpdateVO);
            //文件柜数据保存
//            saveFile(formDataUpdateDTO, paasFormDataEntity, userVO);
            //富文本数据保存
            Integer updateRichTextLine = updateFormRichText(formDataUpdateDTO, richTextData);
            //表单数据和富文本数据其中有一个编辑就要进工作流
            updateLine = Objects.equals(updateLine, 1) || Objects.equals(updateRichTextLine, 1) ? 1 : 0;

            paasFormDataEntity.getData().put(RefundEnum.PRODUCTS.getAttr(),productArray);
            paasFormDataEntity.getData().put(RefundEnum.INVOICES.getAttr(), invoiceArray);
            paasFormDataEntity.getData().put(RefundEnum.PAYMENT_SHEETS.getAttr(), paymentSheetArray);
            paasFormDataEntity.getData().put(RefundEnum.PAYMENTS.getAttr(), paymentArray);

            return new UpdateVO(noApprovalRequired, paasFormDataEntity, updateLine, formDataUpdateDTO.getDataId(), userVO, refundAfterSavePojo);
        } catch (XbbException e) {
            afterSaveRollBack(formDataUpdateDTO, null, beforeUpdateVO, new ReRollBackEntity());
            throw e;
        } catch (Exception e) {
            afterSaveRollBack(formDataUpdateDTO, null, beforeUpdateVO, new ReRollBackEntity());
            LOG.error("purchaseInvoiceFormDataUpdateServiceImpl.update 出错：", e);
            throw new XbbException(SystemErrorCodeEnum.API_ERROR_100001);
        }
    }

    @Override
    public FormDataUpdateVO afterSaveForWorkflow(FormDataUpdateDTO formDataUpdateDTO, BeforeUpdateVO beforeUpdateVO, UpdateVO updateVO, PaasFormEntityExt paasFormEntity, PaasFormDataEntity paasFormDataEntity, PaasFormDataEntity oldPaasFormDataEntity) throws XbbException {
        String corpid = formDataUpdateDTO.getCorpid();
        Long dataId = formDataUpdateDTO.getDataId();
        Integer businessType = formDataUpdateDTO.getBusinessType();
        AssociatedBusinessAfterSavePojo refundAfterSavePojo = updateVO.getAssociatedBusinessAfterSavePojo();
        ReRollBackEntity reRollBackEntity = new ReRollBackEntity();
        if (Objects.nonNull(refundAfterSavePojo)) {
            reRollBackEntity = refundAfterSavePojo.getReRollBackEntity();
        }
        try {
            FormDataUpdateVO formDataUpdateVO = new FormDataUpdateVO();
            Integer noApprovalRequired = updateVO.getNoApprovalRequired();

            SaasFormSaveDTO saasFormSaveDTO = new SaasFormSaveDTO();
            BeanUtil.copyProperties(formDataUpdateDTO, saasFormSaveDTO);
            packageSaasFormUpdateSaveDTO(saasFormSaveDTO, paasFormDataEntity, oldPaasFormDataEntity);
            PaasFormEntity paymentSheetFormEntity = paasFormModel.getByBusinessType(XbbRefTypeEnum.PAYMENT_SHEET.getCode(), corpid);
            PaasFormEntity invoiceFormEntity = paasFormModel.getByBusinessType(XbbRefTypeEnum.INVOICE.getCode(), corpid);
            boolean paymentSheetIsProcess = Objects.equals(paymentSheetFormEntity.getIsProcessForm(), BasicConstant.ONE);
            boolean invoiceIsProcess = Objects.equals(invoiceFormEntity.getIsProcessForm(), BasicConstant.ONE);

            refundAfterSavePojo.setSheetIsProcess(paymentSheetIsProcess);
            refundAfterSavePojo.setInvoiceIsProcess(invoiceIsProcess);
            refundService.afterSaveForUpdateWorkflow(saasFormSaveDTO, refundAfterSavePojo);
            // 日志
//            afterSaveLog(formDataUpdateDTO, paasFormDataEntity, updateVO, beforeUpdateVO);
            // api发起
//            apiHook(formDataUpdateDTO, updateVO, beforeUpdateVO);
            // 2021/3/3 业务规则
//            activeRule(formDataUpdateDTO, beforeUpdateVO, updateVO);

            formDataUpdateVO.setMsg(I18nMessageUtil.getMessage(MessageConstant.FORM_ADD_RETURN_MSG));
            formDataUpdateVO.setCode(PaasConstant.FORM_ADD_RETURN_CODE);
//            PaasProcessDataEntity paasProcessDataEntity = new PaasProcessDataEntity();
//            paasProcessDataEntity.setCorpid(formDataUpdateDTO.getCorpid());
//            paasProcessDataEntity.setFormDataId(dataId);
//            paasProcessDataEntity.setBusinessType(businessType);
//            paasProcessDataEntity.setSaasMark(formDataUpdateDTO.getSaasMark());
//            proModelService.updateFormDataStatus(paasProcessDataEntity, FlowStatusEnum.IN_APPROVAL.getType());

            formDataUpdateVO.setFormDataId(dataId);
            return formDataUpdateVO;
        } catch (XbbException e) {
            afterSaveRollBack(formDataUpdateDTO, updateVO, beforeUpdateVO, reRollBackEntity);
            throw e;
        } catch (Exception e) {
            afterSaveRollBack(formDataUpdateDTO, updateVO, beforeUpdateVO, reRollBackEntity);
            LOG.error("purchaseInvoiceFormDataUpdateServiceImpl.afterSave 出错：", e);
            throw new XbbException(SystemErrorCodeEnum.API_ERROR_100001);
        }
    }

    @Override
    public Long backupData(FormDataUpdateDTO formDataUpdateDTO, BeforeUpdateVO beforeUpdateVO, PaasFormEntityExt paasFormEntityExt, PaasFormDataEntity paasFormDataEntity, PaasFormDataEntity oldPaasFormDataEntity) {
        String corpid = formDataUpdateDTO.getCorpid();
        Integer isProcessForm = paasFormEntityExt.getIsProcessForm();
        if (!formDataUpdateDTO.getIsSatisfyTrigger()) {
            return null;
        }
        JSONObject data = oldPaasFormDataEntity.getData();
        setSystemData(data, oldPaasFormDataEntity);

        List<RefundUserEntity> refundUserEntityList = refundUserModel.getByRefundId(corpid, oldPaasFormDataEntity.getId());
        data.put(StringConstant.USER_TEAM, refundUserEntityList);

        long now = DateTimeUtil.getInt();

        data = backupDataOtherInfo(data, corpid, paasFormDataEntity.getId());

        WorkflowBackupDataEntity workflowBackupDataEntity = new WorkflowBackupDataEntity(corpid, oldPaasFormDataEntity.getAppId(), oldPaasFormDataEntity.getFormId(), oldPaasFormDataEntity.getMenuId(), 0L, 0L, oldPaasFormDataEntity.getId(), data, now, now, DelEnum.NORMAL.getDel());
        workflowBackupDataModel.insert(workflowBackupDataEntity);
        //富文本数据备份
        backupRichText(workflowBackupDataEntity, formDataUpdateDTO.getBusinessType(), formDataUpdateDTO.getSaasMark());
        return workflowBackupDataEntity.getId();
    }

    @Override
    public JSONObject backupDataOtherInfo(JSONObject data, String corpid, Long dataId) {
        List<RefundUserEntity> refundUserEntityList = refundUserModel.getByRefundId(corpid, dataId);
        data.put(StringConstant.USER_TEAM, refundUserEntityList);
        return data;
    }
}
